<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>

  <style>
    * {
      margin: 0;
      padding: 0;
    }

    img {
      width: 520px;
      height: 280px;
    }

    ul,
    li {
      list-style: none;
    }

    ul {
      width: 640px;
      height: 280px;
      margin: 30px auto;
      border: 10px solid pink;
    }

    li {
      width: 160px;
      height: 100%;
      overflow: hidden;
      position: relative;
      float: left;
    }
  </style>
</head>

<body>
  <ul>
    <li><img src="01.jpg" alt=""></li>
    <li><img src="02.jpg" alt=""></li>
    <li><img src="03.jpg" alt=""></li>
    <li><img src="04.jpg" alt=""></li>
  </ul>
</body>

</html>
<script src='https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js'></script>
<script>
  //鼠标移入的目标元素 宽度变为520 其它元素宽度变为40

  //鼠标离开的时候 所有的元素宽度变为160

  //debounce 防抖(重要) 用在这个例子十分贴切

  //throttle 节流

  //防抖的核心就是 延时定时器

  //思路:设定一个定时器,延时一段时间之后执行代码,如果在延时到达之前,进行了操作,那么直接清掉上一个定时器,并且重新设定定时器
  let timer = null;
  $("ul").on("mouseenter", "li", function () {
    if (timer) {//如果有定时器,就清除
      clearTimeout(timer)
    }
    //链式编程 链子断了 使用end()接上 end的作用返回最初调用者
    timer = setTimeout(() => {
      $(this).siblings().finish().animate({ width: 40 }).end().finish().animate({ width: 520 })
    }, 200)
  })

  $("ul").mouseleave(function () {
    $(this).children().animate({ width: 160 })
  })
</script>